{"id":91705,"date":"2020-08-17T07:42:09","date_gmt":"2020-08-17T05:42:09","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy"},"modified":"2020-08-17T07:42:09","modified_gmt":"2020-08-17T05:42:09","slug":"kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy","title":{"rendered":"How to Accidentally Continue Writing a Web-GUI for Haproxy","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>It's been two years and 4 days since I wrote <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/419865\/\">How to Accidentally Write a Web GUI for Haproxy<\/a><\/noindex>, and the situation has long since changed \u2014 everything evolves and develops, and HAProxy-WI strives to keep up with this trend. Over the past two years, a lot has been accomplished, and I want to share the main changes, so: welcome under the 'cat'.<\/p>\n<p><img decoding=\"async\" alt=\"How to Accidentally Continue Writing a Web-GUI for Haproxy\" src=\"\/wp-content\/uploads\/2020\/08\/bac46568401fe775336dd8d76129d260.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n1. I'll start with the most noticeable change, which is of course the design. In my opinion, everything has become more logical, clear, and user-friendly, and of course, quite attractive. The menu sections are now more structured.<\/p>\n<p>2. There are now pages for each server, making it easier to understand the operations of individual services. It looks like this:<\/p>\n<p><img decoding=\"async\" alt=\"How to Accidentally Continue Writing a Web-GUI for Haproxy\" src=\"\/wp-content\/uploads\/2020\/08\/b6abcbb5eb36ca58764958d921d786e0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n3. Nginx support has been added! Unfortunately, it wasn't possible to integrate it just like HAProxy due to the more limited statistics output options in the free version of Nginx, but the main functions (editing, comparing, and versioning of configs, working with and installing services) are still available for Nginx through HAProxy-WI.<\/p>\n<p><img decoding=\"async\" alt=\"How to Accidentally Continue Writing a Web-GUI for Haproxy\" src=\"\/wp-content\/uploads\/2020\/08\/098596cebbc62392264349d41f3e3f8d.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n4. You can now set up complete monitoring for HAProxy and Nginx! It consists of: Grafana, Prometheus, and Nginx and HAProxy exporters. Just a couple of clicks and welcome to the dashboards!<\/p>\n<p>5. In the comments to the previous post, several people mentioned that using bash scripts to install services is like shooting oneself in the foot. I agree with them, and that's why 95% of installations now go through Ansible. It's really convenient and, moreover, more reliable. Only positives all around!<\/p>\n<p>6. How can one avoid reinventing the wheel in the world of bicycles? The child of the bicycle, so to speak\u2026 A small three-wheeled bicycle, perhaps: the ability to easily monitor ports for availability, HTTP response, and check the response for a specific keyword. Yes, not many functions, but it\u2019s easy to install and administer \ud83d\ude42<\/p>\n<p><img decoding=\"async\" alt=\"How to Accidentally Continue Writing a Web-GUI for Haproxy\" src=\"\/wp-content\/uploads\/2020\/08\/0da9875f57402abb4e6b21ee26d4a241.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n7. Very cool work with the HAProxy RunTime API. Why is it very cool? Because it's unique to us and\u2026 well, that\u2019s about it. It may sound a bit pretentious, but I really like how it works. For example, here's how it interacts with the much-loved and often hated stick-table:<\/p>\n<p><img decoding=\"async\" alt=\"How to Accidentally Continue Writing a Web-GUI for Haproxy\" src=\"\/wp-content\/uploads\/2020\/08\/b1fd8c6e3fab0710c9f68cb050534473.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThat's probably all the main points. A lot of work was done on groups, roles, security, and bug detection\u2026 But you know what? Now <noindex><a rel=\"nofollow\" href=\"https:\/\/haproxy-wi.org\">there is a website<\/a><\/noindex>, where there is a demo of HAProxy-WI that you can explore yourself and where the changelog is available. Just please avoid the 'Habr effect,' as I have a modest server for my site and the demo. And the link to <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Aidaho12\/haproxy-wi\">GitHub<\/a><\/noindex><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/515116\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u043e\u0448\u043b\u043e \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0438 4 \u0434\u043d\u044f, \u043a\u0430\u043a \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u041a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c Web-GUI \u0434\u043b\u044f Haproxy, \u0430 \u0432\u043e\u0437 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0442\u0430\u043c \u2014 \u0432\u0441\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 HAProxy-WI \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0439 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u0438. \u0417\u0430 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0431 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u044f \u0438 \u0445\u043e\u0447\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e: \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u00ab\u043a\u0430\u0442\u00bb. 1. \u041d\u0430\u0447\u043d\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91706,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u043e\u0448\u043b\u043e \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0438 4 \u0434\u043d\u044f, \u043a\u0430\u043a \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u041a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c Web-GUI \u0434\u043b\u044f Haproxy, \u0430 \u0432\u043e\u0437 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0442\u0430\u043c \u2014 \u0432\u0441\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c Web-GUI \u0434\u043b\u044f Haproxy | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u043e\u0448\u043b\u043e \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0438 4 \u0434\u043d\u044f, \u043a\u0430\u043a \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u041a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c Web-GUI \u0434\u043b\u044f Haproxy, \u0430 \u0432\u043e\u0437 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0442\u0430\u043c \u2014 \u0432\u0441\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-17T05:42:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-17T05:42:09+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47How to Accidentally Continue Writing a Web-GUI for HAProxy | ProHoster","description":"It has been two years and four days since I wrote How to Accidentally Create a Web-GUI for HAProxy, and the situation has changed significantly \u2014 everything evolves.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c Web-GUI \u0434\u043b\u044f Haproxy | ProHoster","og:description":"\u041f\u0440\u043e\u0448\u043b\u043e \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u0438 4 \u0434\u043d\u044f, \u043a\u0430\u043a \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u041a\u0430\u043a \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c Web-GUI \u0434\u043b\u044f Haproxy, \u0430 \u0432\u043e\u0437 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u0442\u0430\u043c \u2014 \u0432\u0441\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/kak-sluchajno-prodolzhit-pisat-web-gui-dlya-haproxy","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-17T05:42:09+00:00","article:modified_time":"2020-08-17T05:42:09+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91705","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:22:23","updated":"2022-10-04 17:03:41","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/91705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=91705"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/91705\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/91706"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=91705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=91705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=91705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}