GoLang, Mysql, PHP, 原创, 服务器Docker, GoLang, MySql, Nginx, PHP
从服务器开通到建好带证书的网站经历了哪些过程
- by chenxue4076
- 3 years ago
这两天因为服务器到期,续费无优惠,因此换了一个厂家,重新买了服务器,前面部署了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速度,我们使用阿里镜像
centos:
sudo 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 &` &
结束
(200)