服务器搭建过程及常见问题记录
一、Linux操作记录&&常用指令备查
SSH登录使用
-
用户名密码方式登录
ssh user@192.168.10.1 #user - 需要登录的用户名 #192.168.10.1 - 服务器地址,可以是ip也可以是域名
-
秘钥方式登录
ssh -i xxx/xxx/key.pem user@192.168.10.1 # xxx/xxx/key.pem - 为秘钥文件的路径 # user - 要登录的用户名 # 192.168.10.1 - 服务器地址,ip或域名
scp远程拷贝
-
使用用户名密码方式
#格式:scp 源地址 目标地址 scp -r /Desktop/fileDir/test.txt root@192.168.10.1:/user/data/download/test.txt # 操作符 -> scp -r -f等,依据情况使用 # 源地址 -> 拷贝的源文件 本地文件为原文件直接path就可以,远程文件为原文件 user@server_address:/path # 目标地址 -> 要拷贝到的地址 同上
-
使用秘钥
#格式:scp -i 秘钥地址 源地址 目标地址 scp -i -r /temp/vps.pem /Desktop/fileDir/test.txt root@192.168.10.1:/user/data/download/test.txt # 操作符 -> scp -r -f等,依据情况使用 # 源地址 -> 拷贝的源文件 本地文件为原文件直接path就可以,远程文件为原文件 user@server_address:/path # 目标地址 -> 要拷贝到的地址 同上
修改用户密码
-
初始化设置root密码
大部分服务器初始化后是不开放root用户的,需要时候用默认用户登录,然后在切换至root账号设置密码
sudo -i //切换到root权限 passwd //设置root用户初始化密码
-
root账号修改其他用户密码
# 必须保证当前用户是root用户 ##格式 passwd <username> -> 修改<username>用户的密码 passwd user1
-
修改当前账号密码
[beinan@localhost ~]$ passwd Changing password for user beinan. 注:更改beinan用户的密码; (current) UNIX password: 注:请输入当前密码; New UNIX password: 注:请输入新密码; Retype new UNIX password: 注:确认新密码; passwd: all authentication tokens updated successfully. 注:更改成功;
二、常用环境部署
服务功能搭建
-
整体服务器搭建架构思

-
搭建步骤
-
Linux 安装Docker
-
确认是否已安装curl,如果未安装请执行安装
## 亚马逊 aws linux或Redhat系列 yum update yum install curl
-
安装Docker容器
## 亚马逊 aws Linux 镜像 sudo yum install -y docker
-
启动Docker,并设置Docker开机启动
systemctl start docker ##启动docker systemctl enable docker ##允许开机启动
-
-
Docker下安装Nginx
安装详见:https://blog.csdn.net/BThinker/article/details/123507820
docker run -p 80:80 -p 443:443 --name nginx -v /media/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /media/docker/nginx/conf/conf.d:/etc/nginx/conf.d -v /media/docker/nginx/log:/var/log/nginx -v /media/docker/nginx/html:/usr/share/nginx/html -d nginx:latest
Nginx 需要映射三个目录出来,分别为:conf、cong.d、html
conf —— 基本上是Nginx本身的配置项,一般不用修改
conf.d —— 该目录的default.config文件为Nginx做二级域名转发和https配置的主要文件
html —— 该目录是Nginx默认的静态网站目录
-
Docker下安装portainer
以下脚本可以一键安装 中文版Portainer;详见:https://github.com/eysp/public
sh -c "$(curl -kfsSl https://gitee.com/expin/public/raw/master/onex86.sh)"
部署成功后运行docker ps查看是否成功运行
[root@ip-172-31-16-20 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 159c93b9f545 portainer/portainer-ce "/portainer" 7 seconds ago Up 5 seconds 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer [root@ip-172-31-16-20 ~]#
-
Docker下安装 mysql
参考其他容器部署方式,基本无难度
docker run -d --name mysql --restart always -p 3306:3306 mysql:latest
-
Docker下安装 yapi容器
详见:https://www.jianshu.com/p/a97d2efb23c5
-
第一步:创建MongoDB容器
# 创建存储卷 docker volume create mongo-data # 启动 MongoDB docker run -d \ --name mongodb \ -v mongodb/data:/data/db \ -e MONGO_INITDB_ROOT_USERNAME=user \ -e MONGO_INITDB_ROOT_PASSWORD=password \ mongodb
-
第二步:配置Ypai的config.json文件
{ "plugins": [ { "name": "add-user", "options": {} } ], "adminAccount": "yapi-user", "adminPassword": "yapi-user-pwd", "closeRegister": false, "db": { "servername": "db-server-addr", "port": 27017, "DATABASE": "yapi", "user": "db-user", "pass": "db-user-pwd", "authSource": "admin" }, "mail": { "enable": true, "host": "smtp.163.com", "port": 465, "from": "xxxx@163.com", "auth": { "user": "xxxx@163.com", "pass": "email-pwd" } }, "ldapLogin": { "enable": false }, "port": 3000 }
-
-
第三步:初始化Yapi数据库
这里借用了registry.cn-hangzhou.aliyuncs.com/anoyi/yapi 镜像的install-server脚本来初始化数据库。
docker run -it --rm \ --link mongodb:mongo\ --entrypoint npm \ --workdir /yapi/vendors \ -v xxx/config.json:/yapi/config.json \ registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \ run install-server
之后在命令行或者是Navicat 中查看数据库是否创建成功
-
第四步:安装Yapi 数据库创建成功后,随便用哪个Yapi的Docker镜像基本都可以了,只需要将config.json文件映射的本地第二步中所创建的config.json文件即可。
docker run -d --name yapi --restart always -p 3000:3000 -v /media/docker/yapi/config.json:/yapi/config.json jayfong/yapi:latest
-
-
配置Nginx代理
-
为什么需要Nginx:
通过Nginx代理最终实现我们的构想:服务器只开放80和443端口,所有的其他服务均由Nginx 通过二级域名代理到具体的Docker容器中,https的证书也只需要在Nginx中配置即可。
-
配置Nginx容器映射出来的default.config文件
##Http Server server { listen 80; listen [::]:80; server_name www.xxx.com xxx.com; ## 将http请求自动重定向到https return 301 https://www.xxx.com$request_uri; } ## Https 请求的配置 server { listen 443 ssl; listen [::]:443; ## 可以响应的域名 server_name www.xxx.com xxx.com; ## 静态网页根目录 root /usr/share/nginx/html/; index index.html index.htm; ## 证书配置,需要申请好证书,放置到对应目录下 ssl_certificate /etc/nginx/conf.d/crt/www.xxx.com/pem.pem; ssl_certificate_key /etc/nginx/conf.d/crt/www.xxx.com/key.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } ##Portainer配置 server { listen 80; listen [::]:80; server_name docker.xxx.com; return 301 https://docker.xxx.com; } server { listen 443 ssl; listen [::]:443; server_name docker.xxx.com; ssl_certificate /etc/nginx/conf.d/crt/docker.xxx.com/pem.pem; ssl_certificate_key /etc/nginx/conf.d/crt/docker.xxx.com/key.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ## Nginx代理转发配置 location / { ## 转发时的请求头带入处理 proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; root /usr/share/nginx/html; index index.html index.htm; ## 要转发到的地址,这里是我们容器地址和端口转发到域名应该也可以 proxy_pass https://xxx.xxx.xxx.xxx:9000/; } error_page 500 502 503 504 /50x.html; location = /50x.html{ root /usr/share/nginx/html; } } ## PhpAdmin配置 server { listen 80; listen [::]:80; server_name db.xxx.com; return 301 https://db.xxx.com; } server { listen 443 ssl; listen [::]:443; server_name db.xxx.com; ssl_certificate /etc/nginx/conf.d/crt/docker.xxx.com/pem.pem; ssl_certificate_key /etc/nginx/conf.d/crt/docker.xxx.com/key.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://xxx.xxx.xxx.xxx:9080/; } error_page 500 502 503 504 /50x.html; location = /50x.html{ root /usr/share/nginx/html; } } ## Yapi配置 server { listen 80; listen [::]:80; server_name yapi.xxx.com; return 301 https://yapi.xxx.com; } server { listen 443 ssl; listen [::]:443; server_name yapi.xxx.com; ssl_certificate /etc/nginx/conf.d/crt/yapi.xxx.com/pem.pem; ssl_certificate_key /etc/nginx/conf.d/crt/yapi.xxx.com/key.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_set_header HOST $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; root /usr/share/nginx/html; index index.html index.htm; proxy_pass http://xxx.xxx.xxx.xxx:3000/; } error_page 500 502 503 504 /50x.html; location = /50x.html{ root /usr/share/nginx/html; } }
如果Nginx容器在运行中,修改完config.json文件后需要
docker exec -it nginx /bin/sh
进入Nginx容器执行命令重新加载配置;当然,我这里使用了懒办法,直接docker restart nginx
重启nginx容器也能生效。
-
V2ray搭建相关
其他相关
- todo