
引言#
2016年至今个人站一直放在github上,源文档md文件一个仓库, 部署文件夹放另外一个仓库,托管到github。阿里云活动申请了3年的ECS,还好不到二百大洋,能接受,同时申请了一个域名,一个htpps 证书,以后还想干些其他的,就用了docker容器来进行构建,使用了nginx作为后端服务器程序,使用了github ci/cd进行集成和部署。
docker#
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的Linu x或Windows操作系统的机器上个人理解 独立的虚拟主机,与ECS 隔离出来。
启动容器#
docker可以将容器内的文件挂载关联在宿主机器上,保持容器加载的文件在宿主机器上即可使用。 docker 使用步骤 拉取images,运行镜像。平常 常用的有启动有nginx 相应的image。 挂载文件,关联 宿主以及容器相对应的端口。
http
docker run --name docker_nginx -d -p 8080:80 -v /root/nginx-blog/nginx/log:/var/log/nginx -v /root/nginx-blog/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx-blog/nginx/conf.d:/etc/nginx/conf.d -v /root/nginx-blog/nginx/html:/usr/share/nginx/html nginxhttps
docker run --name nginxHttps -d -p 80:80 -p 443:443 -v /root/nginx-blog/nginx/log:/var/log/nginx -v /root/nginx-blog/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx-blog/nginx/conf.d:/etc/nginx/conf.d -v /root/nginx-blog/nginx/html:/usr/share/nginx/html -v /root/nginx-blog/nginx/cert:/etc/nginx/cert nginx进入容器#
进入容器进行,一些操作,如配置文件拷贝。
docker exec -it df2887652588 "/bin/bash"查看运行的容器#
docker ps a停止容器以及其他#
docker stop #Name或者ID
docker start #Name或者ID
docker kill #Name或者ID
docker restart #name或者Idnginx#
nginx.conf 是一个niginx配置文件,包括全局块,event,http 块。sever 块。location 块。
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
nginx 配置 较为难以控制。主要端口,html 控制,log 的文件格式。cert 文件配置。nginx配置文件夹为conf,conf.d ,log, html。其中conf的文件夹配置文件包含conf.d 文件夹里面。conf.d文件夹里面的文件例子如下。
http
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}添加 https
server {
listen 80; #侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉
listen 443 ssl;
server_name www.dahangda.top;
# ssl on;
ssl_certificate /etc/nginx/cert/x.pem;
ssl_certificate_key /etc/nginx/cert/x.key;
ssl_session_cache shared:SSL:1m;
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;
# 这里写的是我的阿里云内网地址,不知道为啥,
proxy_pass http://x.x.x.x:x;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}conf的文件夹nginx配置
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}github action#
每一个任务叫Action
GitHub Actions 有一些自己的术语。
(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。触发条件是什么,
(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
(3)step(步骤):每个 job 由多个 step 构成步骤里面带有名字name,一步步完成,显示在github控制台。
(4)action (动作):每个 step 可以依次执行一个或多个命令(action)。
# main.yml
name: deploy to aliyun
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
# 切换分支,github显示的文字
- name: Checkout
# 仓库或者使用的docker
uses: actions/checkout@master
# 下载 git submodule
- uses: srt32/git-actions@v0.0.3
with:
args: git submodule update --init --recursive
# 使用 node:10
- name: use Node.js 10
uses: actions/setup-node@v1
with:
node-version: 10
# npm install
- name: npm install and build
run: |
npm install
npm run build
env:
CI: true
# Deploy
- name: Deploy
uses: easingthemes/ssh-deploy@v2.0.7
env:
SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }}
ARGS: "-avz --delete"
SOURCE: "[Current File Dir]"
REMOTE_HOST: "[Domain]"
REMOTE_USER: "[UserName]"
TARGET: "[Server Dir]"环境参数#
读取 github的参数,可登陆阿里云服务器,切记不要写入文件内。
https证书#
阿里云 申请免费的一年,足够使用了。
总结#
难点包含的是 https 的配置,github yml 配置(借用github actionMarket)。主要是ssh配置,登陆使用 推送到远程 需要支持https。