如何在digitalocean上部署安装在Ubuntu 16.04上的Apache的golang应用程序?

raf*_*ais 4 apache deployment go digital-ocean ubuntu-16.04

我正在学习Go目前,我已经使用net/http软件包构建了一些非常简单的webapps.我已经创建了一个简单的愿望清单,在这里我添加了一个项目,而不是一个简单的表格我想要的东西,非常简单.

现在我想将这个应用程序部署到我的数字海洋液滴,但我只是不知道如何.我有一些不同域名的php网站,其后面有Apache.

我真的是这个"服务器配置"的东西,通常使用php在webhosts上很容易,我不需要这么多经验.你能指出我正确的方向,让我的Go应用程序在我拥有的域中可用,而没有端口位吗?最好是Apache.

谢谢 :)

sna*_*nap 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
Run Code Online (Sandbox Code Playgroud)

有关这些设置文档,请参见:man systemd.unit,man systemd.serviceman systemd.exec

启动它:

systemctl start myapp
Run Code Online (Sandbox Code Playgroud)

检查一下是否正常:

systemctl status myapp
Run Code Online (Sandbox Code Playgroud)

启用自动启动:

systemctl enable myapp
Run Code Online (Sandbox Code Playgroud)

然后是时候为您的应用程序配置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>
Run Code Online (Sandbox Code Playgroud)

代理相关设置的文档:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html

启用配置:

a2ensite myapp
Run Code Online (Sandbox Code Playgroud)

确保您在Apache配置中没有出错:

apachectl configtest
Run Code Online (Sandbox Code Playgroud)

如果先前未启用代理模块,则此时将出现错误.在这种情况下启用代理模块并再试一次:

a2enmod proxy
a2enmod proxy_http
apachectl configtest
Run Code Online (Sandbox Code Playgroud)

重新加载Apache配置:

systemctl reload apache2
Run Code Online (Sandbox Code Playgroud)

请记住myapp.example.com在DNS中提供该名称.

而已!

编辑:添加指向文档的指针和如果需要启用Apache模块的说明.使用apachectl进行配置测试.