GoLang, Mysql, PHP, 原创, 服务器, , , ,

从服务器开通到建好带证书的网站经历了哪些过程

这两天因为服务器到期,续费无优惠,因此换了一个厂家,重新买了服务器,前面部署了CentOS, 后面又换成了Ubuntu重新部署了一遍,整理出比较简单实用的流程,方便以后在做服务器部署时费时费力问题。

一 :先说下整体磁盘分配与挂载新磁盘

因为系统盘不是SSD, 所以额外的买了一块SSD,用来部署代码。先来看下磁盘情况

1. 使用命令 查看磁盘信息
sudo fdisk -l
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 884D39AE-2030-4231-B486-520515faADD7

Device     Start       End   Sectors Size Type
/dev/vda1   2048      4095      2048   1M BIOS boot
/dev/vda2   4096 104857566 104853471  50G Linux filesystem


Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

可以看出我们有一个 50G的 /dev/vda 和一个 20G的 /dev/vdb

2. 查看挂载情况
df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            944M     0  944M   0% /dev
tmpfs           199M  992K  198M   1% /run
/dev/vda2        50G  7.1G   40G  16% /
tmpfs           992M   24K  992M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           992M     0  992M   0% /sys/fs/cgroup
tmpfs           199M     0  199M   0% /run/user/1000

我们没有查到 /dev/vdb 的挂载信息

3. 设置磁盘格式

因为 /dev/vdb 是一块新磁盘, 因此还需要设置格式, 如果原来设置过则忽略此步奏

mkfs -t ext4 /dev/vdb
4. 挂载磁盘
sudo mount /dev/vdb /data
5. 再用 df -h 查看是否已经挂载成功

二 :系统更新(CentOS)

CentOS:
sudo yum upgrade
sudo yum update
Ubuntu:
sudo apt-get upgrade
sudo apt-get upate

三 :Docker 准备与安装

1. CentOS 还需要准备
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2. 为提升安装Docker速度,我们使用阿里镜像
centossudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
ubuntu:
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
3. CentOS 更新下缓存
sudo yum makecache fast
4. 安装 Docker
centos:
sudo yum install docker-ce docker-ce-cli containerd.io
ubuntu:
sudo apt-get install docker.io
5. 启动 Docker
sudo systemctl start docker
6. 添加用户到 Docker
添加 Docker 用户组, (貌似 Ubuntu 默认已经存在该组了)
sudo groupadd docker
将登陆用户加入到docker用户组中
sudo gpasswd -a $USER docker
更新用户组
newgrp docker
7. Docker Container 换源

创建文件 /etc/docker/daemon.json, 并设置内容, 以下资源任选其一即可,也可以全部都设置上。阿里云的配置需要个人去创建 容器镜像服务/镜像加速器

/etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
    ]
}
systemctl daemon-reload
systemctl restart docker
8. 检查是否安装成功
docker version以下操作仅用于验证,个人觉得没必要
docker pull hello-world
docker images
docker run hello-world

四 :使用 Docker 安装 MySql, PHP-FPM, Nginx

1. 站点代码部署目录规划
/data/
----| logs/
----| www/
----|---| windigniter.com/                                     # 主网站代码目录
----|---| blog.windigniter.com/                                # WordPress代码部署目录
----|---| html/
----|---|---| phpmyadmin -> phpMyAdmin-5.2.0-all-languages/    # phpmyadmin 下载下来管理数据库的
----|---|---| .well-known/                                     # DV证书使用,可不加
----| db_mysql/                                          # 数据库存放目录设置为(空目录,docker跑起来会有相关文件)
----| software/
----|---| mysql/
----|---|---| conf/                                      # 数据库配置目录为(我将my.cnf放在了这里)
----|---|---| mysql-files/                               # MySql-Files 目录(空目录)
----|---| php/
----|---|---| conf/                                      # PHP 配置目录
----|---|---|---| pear.conf
----|---|---|---| php-fpm.conf
----|---|---|---| php/
----|---|---|---|---| php.ini
----|---|---|---|---| php.ini-production
----|---|---| extensions/                                # PHP 扩展默认为空
----|---| nginx/
----|---|---| logs -> /data/logs/
----|---|---| conf/                                      # nginx 配置目录,包括VHost
2. 安装 MySql
配置文件和数据库路径准备

数据库存放目录设置为(空目录,docker跑起来会有相关文件): /data/db_mysql

数据库配置目录为(我将my.cnf放在了这里): /data/software/mysql/conf

日志路径(空目录): /data/logs

MySql-Files 目录(空目录):/data/software/mysql/mysql-files

直接启动mysql8, 本地无mysql镜像会自动拉取
docker run --name mysql8 -d -p 3306:3306 -v /data/software/mysql/conf:/etc/mysql -v /data/software/mysql/conf/my.cnf:/etc/my.cnf -v /data/logs:/logs -v /data/db_mysql:/var/lib/mysql -v /data/software/mysql/mysql-files:/var/lib/mysql-files -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD='wind1gniter.com' mysql
3. 安装 PHP-FPM
配置文件存放路径信息(如果需要个性配置可以先配置好,如果不需要留空应该是可以的)
/data/software/php/
---- conf/
---- extensions/
Web 目录配置
/data/
---- logs/
---- www/
-------- windigniter.com/                                     # 主网站代码目录
-------- blog.windigniter.com/                                # WordPress代码部署目录
-------- html/
下载并启动PHP-FPM
docker run --name php-fpm -p 9000:9000 -v /data/www:/etc/nginx -v /data/www:/data/www -v /data/software/php/conf:/usr/local/etc -v /data/software/php/extensions:/usr/local/lib/php/extensions -v /etc/localtime:/etc/localtime:ro --link mysql8:mysql -d php:fpm
4. 安装 Nginx
对应文件目录
/data/software/nginx/
---- conf.d/
----|---- blog.windigniter.com.conf
----|---- default.conf
----|---- windigniter.com.conf
---- fastcgi.conf
---- fastcgi_params
---- html -> /data/www/html/
---- mime.types
---- modules/
---- nginx.conf
---- scgi_params
---- ssl/
----|---- windigniter.com.cer
----|---- windigniter.com.key
---- uwsgi_params
下载并安装 Nginx
docker run --name nginx80443 -d -p 80:80 -p 443:443 -v /data/software/nginx/conf:/etc/nginx -v /data/logs:/var/log/nginx -v /data/www:/data/www -v /data/gowww:/data/gowww -v /etc/localtime:/etc/localtime:ro --link php-fpm:php nginx
5. 设置自启动
docker update --restart=always mysql8
docker update --restart=always php-fpm
docker update --restart=always nginx80443
6. 定期重启Docker

为了用户体验和为了后期DV证书能正常自动更新,我们每月重启一次 PHP-FPM, Nginx docker

/etc/cron.d/0monthly-docker

# Run the monthly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
0 0 1 * * root docker restart php-fpm
1 0 1 * * root docker restart nginx80443

五 :创建数据库并授权用户访问

1. 创建数据库
CREATE DATABASE IF NOT EXISTS `windigniter` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2. 授权用户
create user 'windigniter'@'172.17.0.%' identified with mysql_native_password by 'wind1gniter.com';

grant all privileges on windigniter.* to 'windigniter'@'172.17.0.%' with grant option;

六 :DV证书安装

这里简单梳理下流程,更详细的证书配置可参考 使用acme安装DV证书并自动更新,基于nginx服务器,支持多个域名

1. 下载 acme
curl https://get.acme.sh | sh            # 如果安装不了,看上面提到的文档,里面有其他方式
2. 创建账号与目录
~/.acme.sh/acme.sh --register-account -m chenxue4076@163.com

sudo mkdir /data/www/html/.well-known && sudo chmod 777 /data/www/html/.well-known
3. 获取证书
~/.acme.sh/acme.sh --issue -d windigniter.com -d blog.windigniter.com -w /data/www/html --force
4. 安装证书
~/.acme.sh/acme.sh --install-cert -d windigniter.com --key-file /data/software/nginx/conf/ssl/windigniter.com.key --fullchain-file /data/software/nginx/conf/ssl/windigniter.com.cer
5. 手动更新证书(可不做)
~/.acme.sh/acme.sh --renew -d windigniter.com -d blog.windigniter.com --force --ecc
6. 自动更新证书(可不做,正常情况系统已自动配置)
crontab -e
22 0 * * * "/home/ubuntu/.acme.sh"/acme.sh --cron --home "/home/ubuntu/.acme.sh" > /dev/null

七 : 其他参考命令

1. Shell 命令重命名
/etc/profile.d/alias.sh

alias tailf='tail -f'
2. GoLang 项目系统配置
/etc/profile.d/go.sh

export GOPATH=/data/gowww
export PATH=$PATH:$GOPATH/bin
export BEEGO_RUNMODE=prod
export GO111MODULE=auto
# export GOPROXY=https://goproxy.io
export GOPROXY=https://goproxy.cn,direct
export RUNMODE=prod
3. 使用脚本监控其他进程是否在执行

如果使用下面脚本最好外面包层循环,因为还需要定时监控该文件状态,所以不太科学

#!/bin/bash

progress=$(ps -ef | grep "api.windigniter.com" | grep -v grep | awk '{print $2}')
if [ -z $progress ] 
then
        echo "start to run go server api.windigniter.com"
        `cd /data/gowww/api.windigniter.com/ && nohup ./api.windigniter.com > /dev/null 2>&1 &` &
else
        echo "go server api.windigniter.com is running {$progress}"
fi

直接使用 cron 监控 应用 api.windigniter.com

/etc/cron.d/0minite-go-iris-windigniter

* * * * * ubuntu `cd /data/gowww/api.windigniter.com/ && nohup ./api.windigniter.com > /dev/null 2>&1 &` &

结束

(196)

Related Post