之前的 linode 充了 5 美元, 一个月就用完了, 还是创建的最便宜的服务器的!!!
以前一直想用用 AWS 的所谓的免费套餐服务器的, 现在 linode 过期了, 可以试着用用了
下面是我的操作流程, 包含错误及解决方法:
登录 AWS.Amazon.com, 注册个账号, 注册后登录, 弹出界面需要输入信用卡来验证,(用于后面的扣费 , 又说是免费, NND!!!)
信用卡验证后, 一会手机短信收到信用卡扣费 1 美元, 折合 6.85RMB, 郁闷, 又说是免费......
登录后进入 AWS 管理控制台, 我是广西南宁电信 20M, 打开页面有点慢, 刷新了几次才能打开, 选择计算下的 EC2
按提示创建实例, 我这里选择的是带有. NET CORE 环境的不知道是上面那个还是下面那个了
上图第六步中的配置安全组 那里, 加个 80 端口的规则
创建好后有个地方是让你下载 pem 密钥文件的, 需要用这个文件来登录服务器
我本地用的 xshell 登录, 登录的时候用户名写 ec2-user, 这是他默认的登录名, 好像也不能改, 登录后运行 dotnet -V 命令, 可以看到 dotnet 是已经装上的了
用命令 which nginx 检查 nginx 有没有安装, 这命令刚刚学会的, 觉得还蛮好用
用命令 apt-get install nginx 安装 nginx, 发现错误, 原来是没有 apt-get 命令的, 看来第四步那里我选择的是上面那个, apt-get 命令应该是 Ubuntu 的
用命令 yum install nginx 安装 nginx, 结果还是出错, 原来默认是 ec2-user 登录的, 没有权限的, 得 sudo 提升权限
用命令 sudo yum install nginx 安装, 成功安装上了 nginx, 可以 which nginx 看下在哪里
切换到上一步 nginx 的目录 / etc/sbin/, 运行 sudo nginx 命令启动
运行命令 curl http://localhost/ 检查 nginx 是否成功启动, 一般都是成功了, 返回默认页面的 html
nginx 的配置文件在 / etc/nginx 目录下的 nginx.conf 里, 可以看到网站默认目录又是在 / usr/share/nginx/HTML 下
切换到上一步目录里, vi index.HTML, 按 insert 键进入编辑模式, 编辑完成后按 ESC 键, 再输入: wq 进行保存并退出, 结果提示出错, 原因还是在权限上
在上一步中输入: q 先直接退出 vi 编辑器, 再重新输入命令 sudo vi index.HTML 进入编辑 , 编辑完成后再: wq 的时候就可以成功保存并退出了
到 www.freenom.com 申请免费域名, 域名解析到 AWS 的服务器的外部 IP 上
第十四步里的 nginx 配置文件里看到我已经绑定上了 www.niunan.cf 域名了, 第十七步域名解析好后, 直接在外部浏览器输入 www.niunan.cf 成功打开 nginx 的页面了
上面已经把 nginx 的示例网站都绑定上域名了, 接下来运行命令 sudo yum install MySQL 进行 MySQL 的安装
安装完 MySQL 后, 然后怎么都启动不了, 看了下还得装 MySQL-server, 运行命令 sudo yum install MySQL-server 出错
最后不知道怎么搞的, 突然输入命令 sudo yum install maridb-server, 然后就可以安装上了...
装完后启动服务 service start MySQL 又不行, 郁闷.
弄了好久, 最后才找到官方文档 按文档来, 用命令 sudo systemctl start mariadb 就可以了. 然后再运行 sudo mysql_secure_installation 来设置 root 用户密码就行了, 就能以 MySQL -u root -p , 再输入密码来登录上去了
在本地电脑把 MySQL 数据库导出成 sql, 命令 mysqldump -B niunan -u root -p> c:/temp/niunandb.sql , 其中 niunan 是数据库名称, c:/temp/niunandb.sql 是备份 的路径名称文件
用 winscp 软件传到服务器上, 我传到 / tmp / 下, 服务器上完整路径是 / tmp/niunandb.sql, 注意如果是传到其他目录像是 / etc / 等目录下是没有权限的, winscp 登录的还是用的 ec2-user 账号的
服务器上登录进 MySQL, 输入 source /tmp/niunandb.sql 导入数据库, 一般都是会成功的
本地 VS 打开 NET CORE 项目, 发布出来, 用 winscp 软件传到服务器目录 / home/ec2-user/wwwroot/niunannet 下, 在服务器上运行 dotnet Niunan.Core.web.dll, 运行成功, 会显示 http://localhost:5004/ , 这时再打开另一个 xshell 连接上服务器, 输入 curl http://localhost:5004/ , 正确的话就会显示 HTML 出来了, 我第一次执行这命令啥 都不显示, 但是在第一个窗口那里报错了, 数据库连接字符串出错, 传到服务器上后应该先在那个网站目录下 sudo vi appsetting.JSON 修改为正确的数据库连接字符串的
上面修改完后再运行 dotnet Niunan.Core.Web.dll, 在另一个窗口再输入 curl http://localhost:5004/ , 就成功返回 HTML 了
把第一个 xshell 窗口关了, 下面来配置 nginx 运行 net core 网站, 可按官网文档配置
切换到 nginx 的配置目录下 cd /etc/nginx/conf.d , 运行命令 sudo touch niunannet.conf 配置文件, 再 sudo vi niunannet.conf , 内容改为:
- {
- listen 80;
- server_name Web.niunan.cf;
- location / {
- proxy_pass http://localhost:5004;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection keep-alive;
- proxy_set_header Host $host;
- proxy_cache_bypass $http_upgrade;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- }
- }
其中那个 http://localhost:5004/ 就是之前我们运行 dotnet Niunan.Core.Web.dll 显示的那个路径, Web.niunan.cf 这个域名 我们已经解析到这个服务器 IP 上了的, 然后 ESC → :wq 保存退出
运行命令 sudo nginx -s reload, 重新加载 nginx 的配置文件
接下来配置 service 服务进程运行 dotnet Niunan.Core.Web.dll , 切换到目录下, cd /etc/systemd/system/, 运行命令 sudo touch niunannet.service, 再运行命令 sudo vi niunannet.service 编辑文件, 内容:
- [Unit]
- Description=Example .NET Web API App running on Ubuntu
- [Service]
- WorkingDirectory=/home/ec2-user/wwwroot/niunannet
- ExecStart=/usr/bin/dotnet /home/ec2-user/wwwroot/niunannet/Niunan.NetCore.NET.Web.dll
- Restart=always
- # Restart service after 10 seconds if the dotnet service crashes:
- RestartSec=10
- KillSignal=SIGINT
- SyslogIdentifier=dotnet-example
- User=root
- Environment=ASPNETCORE_ENVIRONMENT=Production
- Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
- [Install]
- WantedBy=multi-user.target
以上文件内容都可以在第二十九步的官网文档中看到的, 其中那个 user=root 是服务器的登录用户, 编辑好文件内容后保存退出
运行命令 sudo systemctl enable niunannet.service, 再运行命令 sudo systemctl start niunannet.service, 再运行命令 systemctl status niunannet.service 查看服务运行状态, 一切顺利的话就应该可以看到 running 正在运行了
在这台 AWS 的服务器上我试一次就正常运行了, 但是之前在阿里云服务器上试都是 fail 运行失败的, 那时不知道怎么弄啊弄的就弄好了, 反正就是把 fail 出来的错误信息往百度上贴, 然后把网上的解决方案一个一个试, 然后就 running 了, 百度不行就 bing, 再不行就 FQ 上 google, 最后好像是在 google 上搜索到的 stack overflow 上的贴子解决问题了....
服务运行后再试试 curl http://localhost:5004/ , 成功返回页面 HTML, 再试试 curl http://web.niunan.cf/ (第三十步里绑定上的域名), 也是成功返回 HTML, 在外部浏览器输入 http://web.niunan.cf, 成功打开网页了
至此, 整个部署流程结束!!!
尾声: 想写篇图文并茂的博客好麻烦, 这篇文章从 2019 年 01 月 09 日 20:00:00 写到 2019 年 01 月 10 日 00:37:21, 期间还不停感冒, 真难受, 攒钱买空调!!!
来源: https://yq.aliyun.com/articles/685858