我正在学习Go目前,我已经使用net / http软件包构建了一些非常简单的webapps。我已经创建了一个简单的愿望清单,在这里我添加了一个项目,而不是简单的表格我想要的东西,非常简单。
现在我想将此应用程序部署到我的Digital Ocean Droplet,但我不知道如何。我有一些不同域名的php网站,后面有Apache。
我真的是这个"服务器配置"事情,通常使用php在webhosts上很容易,我也不需要这么多经验。你能指出我正确的方向,让我的Go应用程序在我拥有的域中可用,而没有端口位吗?最好是Apache。
谢谢:)
答案 0 :(得分:9)
注意:此答案中的几乎所有内容都需要根据您的具体情况进行自定义。这是假设您的Go应用程序被调用" myapp"并且你已经让它在8001端口(以及其他许多人)收听。
您应该创建一个 systemd单元文件,以使您的应用程序在启动时自动启动。将以下内容放入/etc/systemd/system/myapp.service
(以适应您的需求):
[Unit]
Description=MyApp webserver
[Service]
ExecStart=/www/myapp/bin/webserver
WorkingDirectory=/www/myapp
EnvironmentFile=-/www/myapp/config/myapp.env
StandardOutput=journal
StandardError=inherit
SyslogIdentifier=myapp
User=www-data
Group=www-data
Type=simple
Restart=on-failure
[Install]
WantedBy=multi-user.target
有关这些设置的文档,请参阅:man systemd.unit
,man systemd.service
和man systemd.exec
启动它:
systemctl start myapp
检查是否正常:
systemctl status myapp
启用自动启动:
systemctl enable myapp
然后是时候为您的应用配置Apache虚拟主机了。将以下内容放入/etc/apache2/sites-available/myapp.conf
:
<VirtualHost *:80>
ServerName myapp.example.com
ServerAdmin webmaster@example.com
DocumentRoot /www/myapp/public
ErrorLog ${APACHE_LOG_DIR}/myapp-error.log
CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined
ProxyPass "/" "http://localhost:8001/"
</VirtualHost>
代理相关设置的文档:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
启用配置:
a2ensite myapp
确保您在Apache配置中没有出错:
apachectl configtest
如果先前未启用代理模块,则此时会出现错误。在这种情况下,启用代理模块并再试一次:
a2enmod proxy
a2enmod proxy_http
apachectl configtest
重新加载Apache配置:
systemctl reload apache2
请记住在DNS中提供名称myapp.example.com
。
那就是它!
编辑:添加了指向文档的指针以及在需要时启用Apache模块的说明。使用apachectl进行配置测试。